// import pcassCode from './json/pcas-code.json';

// var addressList = []; //地址列表
// addressList = pcassCode;
// addressList.forEach((item) => {
//   formatAddresList(item, 1, '');
// });

// /**
//  * 地址数据处理
//  * @param addressList-各级数据对象
//  * @param index-对应的省/市/县区/街道
//  * @param province-只有直辖市会处理为  北京市北京市
//  * @returns <array>
//  */
// function formatAddresList(addressList, index, province) {
//   if (index === 1) {
//     //省
//     addressList.province = addressList.name;
//     addressList.type = 'province';
//   }
//   if (index === 2) {
//     //市
//     if (addressList.name == '市辖区') {
//       addressList.name = province.name;
//     }
//     addressList.city = addressList.name;
//     addressList.type = 'city';
//   }
//   if (index === 3) {
//     //区或者县
//     addressList.county = addressList.name;
//     addressList.type = 'county';
//   }
//   if (index === 4) {
//     //街道
//     addressList.street = addressList.name;
//     addressList.type = 'street';
//   }
//   if (addressList.children) {
//     index++;
//     addressList.children.forEach((res) => {
//       formatAddresList(res, index, addressList);
//     });
//   }
// }
var smartObj = {};
/**
 * 解析姓名
 * @param 內容
 * @returns <obj>
 */
function extractRealName(e) {
  // 假设姓名总是以“姓名：”开头，后面跟着2到4个汉字
  const regexName = /姓名：([\u4e00-\u9fa5]{2,4})/;
  const match = e.match(regexName);

  // 非以“姓名：”开头
  const notRegexName = /([\u4e00-\u9fa5]{2,4})/.exec(e);
  const notMatch = notRegexName ? notRegexName[0] : null;

  // 如果匹配到结果，返回姓名部分
  return match ? match[1] : notMatch;
}
/**
 * 解析车牌
 * @param 內容
 * @returns <obj>
 */
function findPlateNumbers(e) {
  const regexPlate =
    /[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]{1}[A-Za-z]{1}[A-Za-z0-9]{4,5}[A-Za-z0-9挂学警港澳]{1}/g;
  const plateNumbers = e.match(regexPlate);
  return (plateNumbers && plateNumbers[0]) || null;
}
/**
 * 解析身份证
 * @param 內容
 * @returns <obj>
 */
function extractIDCardNumbers(e) {
  // 身份证号码正则表达式
  // \d{6} 地址码
  // (\d{4})(\d{2})(\d{2}) 出生日期码，分组以方便后续可能的日期解析
  // \d{3} 顺序码
  // \d|x 最后一位校验码，x代表大写的X
  const regexIDCard = /\b\d{6}(\d{4})(\d{2})(\d{2})\d{3}(\d|X)\b/g;

  // 使用正则表达式匹配并查找所有匹配项
  const idCardNumbers = e.match(regexIDCard);

  return idCardNumbers ? idCardNumbers[0] : null; // 如果没有找到匹配项，返回空数组而非null
}

/**
 * 解析內容
 * @param event内容
 * @returns <obj>
 */
function smart(event) {
  // 获取车牌
  // const e = event.replaceAll(/\s/g, '');
  // const vehicle = findPlateNumbers(e);

  // 根据特殊字符分割
  let varchar = event.replace(/[\n\r,，]/g, ' ');
  varchar = stripscript(varchar); //过滤特殊字符
  let obj = {
    // vehicle,
    name: extractRealName(event),
  };
  let copyaddress = JSON.parse(JSON.stringify(varchar));
  copyaddress = copyaddress.split(' ');

  copyaddress.forEach((res) => {
    if (res) {
      // if (res.length == 1) {
      //   res += 'XX'; // 过滤掉一位的名字或者地址
      // }
      let addressObj = smatrAddress(res);
      obj = Object.assign(obj, addressObj);
    }
  });
  console.log('🚀 ~ smart ~ obj:', obj);

  if (!obj.vehicle && obj.vehicleAdd && obj.vehicleAddress) {
    obj.vehicle = obj.vehicleAdd + obj.vehicleAddress;
  }
  return obj;
}

function smatrAddress(event) {
  smartObj = {};
  let address = event;
  //address=  event.replace(/\s/g, ''); //去除空格
  address = stripscript(address); //过滤特殊字符

  // var xreg =
  //   /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
  // var creg =
  //   /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
  // if (creg.test(event) || xreg.test(event)) {
  //   return { vehicle: event };
  // }

  // 判断车牌归属地
  const regex = new RegExp(
    `[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼|使领]`,
    'i',
  );

  // 获取车牌
  const regexPlate = /[A-Za-z]{1}[A-Za-z0-9]{4,5}[A-Za-z0-9挂学警港澳]{1}/g;
  const plateNumbers = event.match(regexPlate);

  // 获取完整车牌
  const vehicle = findPlateNumbers(event);
  if (regex.test(event) && !vehicle) {
    smartObj.vehicleAdd = event;
  } else if (vehicle) {
    smartObj.vehicle = vehicle;
    address = address.replace(vehicle, '');
  } else if (plateNumbers) {
    smartObj.vehicleAddress = plateNumbers[0];
    address = address.replace(plateNumbers[0], '');
  }

  //身份证号匹配
  if (extractIDCardNumbers(address)) {
    smartObj.idCard = address;
    address = address.replace(address, '');
  }

  //电话匹配
  let phone = address.match(/(86-[1][0-9]{10}) | (86[1][0-9]{10})|([1][0-9]{10})/g);
  if (phone) {
    smartObj.phone = phone[0];
    address = address.replace(phone[0], '');
  }

  return smartObj;
}
//过滤特殊字符
function stripscript(s) {
  s = s.replace(/(\d{3})-(\d{4})-(\d{4})/g, '$1$2$3');
  s = s.replace(/(\d{3}) (\d{4}) (\d{4})/g, '$1$2$3');
  var pattern = new RegExp(
    "[`~!@#$^&*()=|{}':;',\\[\\].<>/?~！@#￥……&*（）——|{}【】‘；：”“’。，、？-]",
  );
  var rs = '';
  for (var i = 0; i < s.length; i++) {
    rs = rs + s.substr(i, 1).replace(pattern, ' ');
  }
  rs = rs.replace(/[\r\n]/g, '');
  return rs;
}

// function IdentityCodeValid(code) {
//   let pass;
//   var city = {
//     11: '北京',
//     12: '天津',
//     13: '河北',
//     14: '山西',
//     15: '内蒙古',
//     21: '辽宁',
//     22: '吉林',
//     23: '黑龙江 ',
//     31: '上海',
//     32: '江苏',
//     33: '浙江',
//     34: '安徽',
//     35: '福建',
//     36: '江西',
//     37: '山东',
//     41: '河南',
//     42: '湖北 ',
//     43: '湖南',
//     44: '广东',
//     45: '广西',
//     46: '海南',
//     50: '重庆',
//     51: '四川',
//     52: '贵州',
//     53: '云南',
//     54: '西藏 ',
//     61: '陕西',
//     62: '甘肃',
//     63: '青海',
//     64: '宁夏',
//     65: '新疆',
//     71: '台湾',
//     81: '香港',
//     82: '澳门',
//     91: '国外 ',
//   };
//   pass = true;

//   if (!code || !/^\d{17}(\d|X)$/i.test(code)) {
//     pass = false;
//   } else if (!city[code.substr(0, 2)]) {
//     pass = false;
//   } else {
//     //18位身份证需要验证最后一位校验位
//     if (code.length == 18) {
//       code = code.split('');
//       //∑(ai×Wi)(mod 11)
//       //加权因子
//       var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
//       //校验位
//       var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
//       var sum = 0;
//       var ai = 0;
//       var wi = 0;
//       for (var i = 0; i < 17; i++) {
//         ai = code[i];
//         wi = factor[i];
//         sum += ai * wi;
//       }
//       if (parity[sum % 11] != code[17]) {
//         pass = false;
//       }
//     }
//   }
//   return pass;
// }

export default smart;
